home *** CD-ROM | disk | FTP | other *** search
/ Aminet 5 / Aminet 5 - March 1995.iso / Aminet / dev / misc / LEDA_gene.lha / LEDA-3.1c-generic / incl / LEDA / impl / m_heap.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-05  |  2.1 KB  |  97 lines

  1. /*******************************************************************************
  2. +
  3. +  LEDA  3.1c
  4. +
  5. +
  6. +  m_heap.h
  7. +
  8. +
  9. +  Copyright (c) 1994  by  Max-Planck-Institut fuer Informatik
  10. +  Im Stadtwald, 6600 Saarbruecken, FRG     
  11. +  All rights reserved.
  12. *******************************************************************************/
  13.  
  14.  
  15. #ifndef LEDA_M_HEAP_H
  16. #define LEDA_M_HEAP_H
  17.  
  18. //------------------------------------------------------------------------------
  19. // m_heap : monotonic heaps 
  20. //
  21. // a) the sequence of minimum keys (over time) is monotonic (non-decreasing)
  22. // b) the difference of minimum and maximum key is bounded by a constant M
  23. //
  24. // Implementation: cyclic array of lists
  25. //
  26. // Stefan Naeher  (1991)
  27. //------------------------------------------------------------------------------
  28.  
  29.  
  30. #include <LEDA/basic.h>
  31. #include <LEDA/list.h>
  32.  
  33.  
  34. typedef list_item m_heap_item;
  35.  
  36. class m_heap {
  37.  
  38.     int start;
  39.     int offset;
  40.     int M;
  41.     int count;
  42.     list<GenPtr> L;
  43.  
  44.     list_item*   T;
  45.  
  46. virtual void copy_inf(GenPtr&)  const {}
  47. virtual void clear_inf(GenPtr&) const {}
  48. virtual void print_inf(GenPtr x) const { cout << x; }
  49.  
  50. protected:
  51.  
  52. m_heap_item item(void* p) const { return (m_heap_item)p; }
  53.  
  54. public:
  55.  
  56. m_heap_item insert(GenPtr,GenPtr);
  57. m_heap_item find_min() const;
  58. m_heap_item first_item() const;
  59. m_heap_item next_item(m_heap_item) const;
  60.  
  61. GenPtr       del_min();
  62.  
  63. void change_key(m_heap_item,GenPtr);
  64. void decrease_key(m_heap_item it,GenPtr x) { change_key(it,x); }
  65. void change_inf(m_heap_item it, GenPtr x)  { copy_inf(x); L[it] = x; };
  66. void del_item(m_heap_item);
  67. void clear();
  68.  
  69. GenPtr inf(m_heap_item it) const { return L.inf(it); }
  70.  
  71. GenPtr key(m_heap_item) const
  72. { error_handler(1,"m_heap::key not implemented");
  73.   return 0; 
  74.  }
  75.  
  76. int    size()   const     { return count; }
  77. int    empty()  const     { return count==0; }
  78.  
  79. void   print() const;
  80.  
  81.  m_heap(int M=1024);         
  82.  m_heap(int,int) { error_handler(1,"illegal constuctor"); }
  83.  
  84. virtual ~m_heap() { delete T; }
  85.  
  86.  
  87. // still to do: copy operations
  88.  
  89.  m_heap& operator=(const m_heap&) { return *this; }
  90.  m_heap(const m_heap&) {}
  91.  
  92. };
  93.  
  94. #endif
  95.  
  96.